<?php

/**
 * Classe CONTROLLER da tabela TB_PESSOA
 * 
 * @author			Mário R. Castro
 * @copyright		Voitech Sistema
 * @package			SEMAS
 * @subpackage		semas.application.controller
 * @version			1.0
*/
class PessoaController extends Zend_Controller_Action {
	
        public function init(){
            parent::init();
            $this->view->tituloPagina = "Pessoas";
        }
    

	public function indexAction() {
            $form = new App_Form_Pesquisa();
            $form->montaTipoBusca(array('no_pessoa'=>'Nome','nu_cpf'=>'CPF'));
            $form->setSituacao();
            $form->setAction('javascript:;');
            $form->show();
            $this->view->form = $form;
	}

	public function iniciarModalAction() {
			$this->_helper->layout->disableLayout();
            $form = new App_Form_Pesquisa();
            $form->montaTipoBusca(array('no_pessoa'=>'Nome','nu_cpf'=>'CPF'));
            $form->setAction('javascript:;');
            $form->show();
            $this->view->form = $form;
	}	

	public function listarModalAction(){
            $this->_helper->layout->disableLayout();			
            try {
                if ($this->getRequest()->isPost()) {				  
                    $arrParam = array($this->_getParam('tipo_busca') => $this->_getParam('palavra_chave')
                                     ,'st_ativo'=>$this->_getParam('st_ativo'));
                    $obRepository = new App_Model_PessoaRepository();                            
                    $paginator = new Voitech_Paginator($obRepository->listarTodos($arrParam),$this->_getParam( 'list' ),$this->_getParam('page'));		       					    	
                    $this->view->paginator	= $paginator->paginar(5);
                    $this->view->div_id 	= 'div_lista_modal';
                    $this->view->dataType 	= "post";
                    $this->view->frmName	= "frmPesquisar";       
                }			
            }catch (Voitech_ExceptionValidate $e) {
                echo $this->_helper->json(array('resultado'=>ERRO_VALIDACAO,'retorno'=>'Favor preencher corretamente os dados obrigatórios'));
            }catch (Voitech_Exception $e) {
                echo $this->_helper->json(array('resultado'=>ERRO,'retorno'=>$e->getMessage()));
            }catch (Exception $e) {
                Voitech_Log::gerarLog($e->getMessage());
                echo $this->_helper->json(array('resultado'=>ERROR_GERAL,'retorno'=>$e->getMessage()));
            }			
	}	
	
	public function listarAction(){
            $this->_helper->layout->disableLayout();			
            try {
                if ($this->getRequest()->isPost()) {				  
                    $arrParam = array($this->_getParam('tipo_busca') => $this->_getParam('palavra_chave')
                                     ,'st_ativo'=>$this->_getParam('st_ativo'));
                    $obRepository = new App_Model_PessoaRepository();                            
                    $paginator = new Voitech_Paginator($obRepository->listarTodos($arrParam),$this->_getParam( 'list' ),$this->_getParam('page'));		       					    	
                    $this->view->paginator	= $paginator->paginar(10);
                    $this->view->div_id 	= 'div_lista';
                    $this->view->dataType 	= "post";
                    $this->view->frmName	= "frmPesquisar";       
                }			
            }catch (Voitech_ExceptionValidate $e) {
                echo $this->_helper->json(array('resultado'=>ERRO_VALIDACAO,'retorno'=>'Favor preencher corretamente os dados obrigatórios'));
            }catch (Voitech_Exception $e) {
                echo $this->_helper->json(array('resultado'=>ERRO,'retorno'=>$e->getMessage()));
            }catch (Exception $e) {
                Voitech_Log::gerarLog($e->getMessage());
                echo $this->_helper->json(array('resultado'=>ERROR_GERAL,'retorno'=>$e->getMessage()));
            }			
	}
	
	
	public function cadastroAction() {
            $this->_helper->layout->disableLayout();
            $form = new App_Form_Pessoa();
			$formBotao = new App_Form_BotaoCadastro();
            $form->setAction('javascript:;');
            if( $this->_getParam('id') != '')
            {
                $where = App_Model_Db_Pessoa::build()->getAdapter()->quoteInto('co_pessoa = ?', $this->_getParam('id'));			
                $obPessoa = App_Model_Db_Pessoa::build()->fetchRow($where);
                if( !empty($obPessoa) )
                {
                	if( $obPessoa->dt_nascimento != '' ){
	               		$obPessoa->dt_nascimento = Voitech_Util::converteBancoData($obPessoa->dt_nascimento);
	                }                	
                    $form->populate($obPessoa->toArray());	
                }			
            }
            $this->view->form = $form;
			$this->view->formBotao = $formBotao;
	}
	
	public function cadastroModalAction() {
            $this->_helper->layout->disableLayout();
            $form = new App_Form_Pessoa();
			$formBotao = new App_Form_BotaoCadastroModal();
            $form->setAction('javascript:;');
            if( $this->_getParam('id') != '')
            {
                $where = App_Model_Db_Pessoa::build()->getAdapter()->quoteInto('co_pessoa = ?', $this->_getParam('id'));			
                $obPessoa = App_Model_Db_Pessoa::build()->fetchRow($where);
                if( !empty($obPessoa) )
                {
	                if( $obPessoa->dt_nascimento != '' ){
	               		$obPessoa->dt_nascimento = Voitech_Util::converteBancoData($obPessoa->dt_nascimento);
	                }                	
                    $form->populate($obPessoa->toArray());	
                }			
            }
            $this->view->form = $form;
			$this->view->formBotao = $formBotao;
	}
	
	public function salvarCadastroAction(){
            $this->_helper->layout->disableLayout();
            $this->_helper->viewRenderer->setNoRender();
            $form = new App_Form_Pessoa();	
            try {
                App_Model_Db_Pessoa::build()->getAdapter()->beginTransaction();

//                if( !$form->isValid($this->_getAllParams()) )
//                {
//                    throw new Voitech_ExceptionValidate('erro_validacao');				
//                }

				
                $obPessoa = new App_Model_Pessoa();
                $obPessoa->setCoPessoa($this->_getParam('co_pessoa'));
                $obPessoa->setNuCpf($this->_getParam('nu_cpf'));
                $obPessoa->setNoPessoa($this->_getParam('no_pessoa'));
                $obPessoa->setNuRg($this->_getParam('nu_rg'));
                $obPessoa->setNoRgEmissor($this->_getParam('no_rg_emissor'));
                
                $obPessoa->setSgUfRgEmissor($this->_getParam('sg_uf_rg_emissor'));                                
               	$obPessoa->setDtNascimento($this->_getParam('dt_nascimento'));
                
                $obPessoa->setNoEndereco($this->_getParam('no_endereco'));
                $obPessoa->setNoComplemento($this->_getParam('no_complemento'));
                $obPessoa->setNoBairro($this->_getParam('no_bairro'));
                
                $obParamCidade = new App_Model_ParamCidade($this->_getParam('co_cidade'));
                $obParamCidade->setObParamUf(new App_Model_ParamUf($this->_getParam('sg_uf')));
                
                $obPessoa->setObParamCidade($obParamCidade);                              
                $obPessoa->setObSexo(new App_Model_ParamSexo($this->_getParam('co_sexo')));                               
                $obPessoa->setObEstadoCivil(new App_Model_ParamEstadoCivil($this->_getParam('co_estado_civil')));                
                
                $obPessoaRepository = new App_Model_PessoaRepository();
                $obPessoaRepository->salvar($obPessoa);
                App_Model_Db_Pessoa::build()->getAdapter()->commit();
                echo $this->_helper->json(array('resultado'=>OK,'retorno'=>'Registro salvo com sucesso!.'));							
            }catch (Voitech_ExceptionValidate $e) {
                App_Model_Db_Pessoa::build()->getAdapter()->rollBack();
                //echo $this->_helper->json(array('resultado'=>ERRO_VALIDACAO,'retorno'=>'Favor preencher corretamente os dados obrigatórios'));
                echo $this->_helper->json(array('resultado'=>ERRO_VALIDACAO,'retorno'=>'Favor preencher corretamente os dados obrigatórios'));
            }catch (Voitech_Exception $e) {
                App_Model_Db_Pessoa::build()->getAdapter()->rollBack();
                echo $this->_helper->json(array('resultado'=>ERRO,'retorno'=>$e->getMessage()));
            }catch (Exception $e) {
                App_Model_Db_Pessoa::build()->getAdapter()->rollBack();
                Voitech_Log::gerarLog($e->getMessage());
                echo $this->_helper->json(array('resultado'=>ERROR_GERAL,'retorno'=>'Erro ao alterar registro.'.$e));
            }		
	}
	

	public function alterarStatusAction() {
            $this->_helper->layout->disableLayout();
            $this->_helper->viewRenderer->setNoRender();
            try {
                App_Model_Db_Pessoa::build()->getAdapter()->beginTransaction();                        
                $obPessoaRepository = new App_Model_PessoaRepository();                        
                if( $this->_getParam("st_ativo") == "S") {
                    $obPessoaRepository->ativar(new App_Model_Pessoa($this->_getParam('co_pessoa')));
                }
                else
                {
                    $obPessoaRepository->desativar(new App_Model_Pessoa($this->_getParam('co_pessoa')));
                }
                App_Model_Db_Pessoa::build()->getAdapter()->commit();
                echo $this->_helper->json(array('resultado'=>OK,'retorno'=>'Registro alterado com sucesso!.'));				

            }catch (Voitech_ExceptionValidate $e) {
                App_Model_Db_Pessoa::build()->getAdapter()->rollBack();
                echo $this->_helper->json(array('resultado'=>ERRO_VALIDACAO,'retorno'=>'Favor preencher corretamente os dados obrigatórios'));
            }catch (Voitech_Exception $e) {
                App_Model_Db_Pessoa::build()->getAdapter()->rollBack();
                echo $this->_helper->json(array('resultado'=>ERRO,'retorno'=>$e->getMessage()));
            }catch (Exception $e) {
                App_Model_Db_Pessoa::build()->getAdapter()->rollBack();
                Voitech_Log::gerarLog($e->getMessage());
                echo $this->_helper->json(array('resultado'=>ERROR_GERAL,'retorno'=>$e->getMessage()));
            }		
	}
        

        public function buscarPessoaJsonAction(){
            $this->_helper->layout->disableLayout();
            $this->_helper->viewRenderer->setNoRender();
            try{
                $arrParam = array('no_pessoa' => $this->_getParam('term'));
                $obPessoaRepository = new App_Model_PessoaRepository();
                $arObPessoa = $obPessoaRepository->listarTodos($arrParam);
                echo $this->_helper->json(array('resultado'=>OK,'retorno'=>Voitech_Util::converteModeloArrayCombo($arObPessoa, 'CoPessoa', "NoPessoa")));                
            }catch (Voitech_Exception $e) {
                echo $this->_helper->json(array('resultado'=>ERRO,'retorno'=>$e->getMessage()));
            }catch (Exception $e) {
                Voitech_Log::gerarLog($e->getMessage());
                echo $this->_helper->json(array('resultado'=>ERROR_GERAL,'retorno'=>'Ops, ocorreu um erro'));
            }
        }
        

        public function listarPessoaAtivoJsonAction(){
            $this->_helper->layout->disableLayout();
            $this->_helper->viewRenderer->setNoRender();
            try{
                $obPessoaRepository = new App_Model_PessoaRepository();
                $arObPessoa = $obPessoaRepository->listarTodos(array('st_ativo'=>'S'));
                echo $this->_helper->json(array('resultado'=>OK,'retorno'=>Voitech_Util::converteModeloArrayCombo($arObPessoa, 'CoPessoa', "NoPessoa",1)));
            }catch(Voitech_Exception $e){
                echo $this->_helper->json(array('resultado'=>ERRO,'retorno'=>$e->getMessage()));
            }catch(Exception $e){
                Voitech_Log::gerarLog($e->getMessage());
                echo $this->_helper->json(array('resultado'=>ERRO,'retorno'=>ERROR_GERAL));
            }        
        }


	public function excluirAction() {
            $this->_helper->layout->disableLayout();
            $this->_helper->viewRenderer->setNoRender();
            try {
                App_Model_Db_Pessoa::build()->getAdapter()->beginTransaction();                        
                $obPessoaRepository = new App_Model_PessoaRepository();                        

                $obPessoaRepository->excluir(new App_Model_Pessoa($this->_getParam('co_pessoa')));
                
                App_Model_Db_Pessoa::build()->getAdapter()->commit();
                echo $this->_helper->json(array('resultado'=>OK,'retorno'=>'Registro excluido com sucesso!.'));				

            }catch (Voitech_ExceptionValidate $e) {
                App_Model_Db_Pessoa::build()->getAdapter()->rollBack();
                echo $this->_helper->json(array('resultado'=>ERRO_VALIDACAO,'retorno'=>$form->getErrors()));
            }catch (Voitech_Exception $e) {
                App_Model_Db_Pessoa::build()->getAdapter()->rollBack();
                echo $this->_helper->json(array('resultado'=>ERRO,'retorno'=>$e->getMessage()));
            }catch (Exception $e) {
                App_Model_Db_Pessoa::build()->getAdapter()->rollBack();
                Voitech_Log::gerarLog($e->getMessage());
                echo $this->_helper->json(array('resultado'=>ERROR_GERAL,'retorno'=>$e->getMessage()));
            }		
	}
	
}

